原作者为 RioTian@cnblogs, 本作品采用 CC 4.0 BY 进行许可,转载请注明出处。

在学 Java 连接数据库时老师提到过 JSP,刚好这个学期有 JSP 的课程,现做一些基础以及环境配置的介绍。

什么是 JSP?

  • 动态网页技术标准
  • 能把 Java 代码嵌入静态的页面中
  • JSP 编译器把 JSP 文件编译成 Java 写的 Servlet(服务器端程序),再交由 Java 编译器
  1. <html>
  2. <title>Hello world!</title>
  3. <body>
  4. <%=out.println("Hello world!")%>
  5. </body>
  6. </html>

环境配置

  1. 语言环境:JDK
  2. 网页服务器:Tomcat,安装教程
  3. IDE:IntelliJ IDEA / Eclipse

前两点非常简单不再赘述。

老师竟然说 JSP 没什么好用的编辑器只能在 Eclipse 中写(黑人问号

明明 IDEA 就很好....

这里记录一下 IDEA 如何配置 JSP 的开发环境

IntelliJ IDEA Configuration

  • 新建一个 Java Enterprise 项目,下面 Application Server 选择新建

    选择 Tomcat Server,设置 Tomcat Home (安装目录)

这里需要注意 IDEA 可能会没有权限访问 Tomcat 的目录,导致无法读取 Tomcat,需要手动访问一次该目录提权:

  • Windows:资源管理器直接访问,会提示需要管理员权限,点继续就 OK 了

  • Linux:chmod 777

  • 下面 Additional Libraries and Frameworks 选择 Web Application,

    点 Next,改名创建,得到如下图所示结构的项目

  • 打开 index.jsp

    打开右上角 Edit Configuration

    选择 Application server

    URL 一般是:http://localhost:8080/demo_war_exploded/

    其中 demo 为项目名字,_war_exploded 为自动生成的后缀,需要保留

  • 打开 Deployment,界面应如下图

​ 如果这个 war_exploded 没有出现在里面的话点击右边加号自己加进去

  • 简单写一下 index.jsp

    比如下面实现了一个简单的 Hello world 的页面

  1. <html>
  2. <title>Hello world!</title>
  3. <body>
  4. <%=out.println("Hello world!")%>
  5. </body>
  6. </html>
  • 点击右上角 Run,开始运行

update:21.9.22

切回至“Server”,在“Open Browser”设置里,

建议勾选上“After Launch”,意思为当启动TomCat后,自动打开浏览器并运行项目,此时同样可以在别的浏览器手动输入地址进行访问。

建议将“On 'Update' action”和“On frame deactivation”设置为“Update classes and resources”,这样当修改项目内容时会自动更新字节码文件和资源文件,避免反复重启TomCat服务器:

Question & Solution

运行之后会大概率出现以下问题,不要问我怎么知道的…


\[QAQ
\]

  • 端口超界,不能为 - 1

原因:Tomcat 安装的默认 Shutdown 端口为 - 1,需要修改一下

解决:打开 Tomcat 安装目录下的 server.xml,类似如下路径

  1. C:\Program Files\apache-tomcat-8.5.71-windows-x64\apache-tomcat-8.5.71\conf\server.xml

修改 shutdown port 为任一未被占用的端口 (1024 - 65535),如图中 8005 位置

  • 端口 8080 已被占用

原因:Tomcat 运行中并占用了 8080 端口

解决:打开刚才的 Edit Configuration,修改 Tomcat Server Settings 中的 HTTP port 为任一未被占用的端口 (1024 - 65535),如图中”8088”,同时别忘修改上面的 URL 的端口

  • output 输出乱码

原因:Tomcat 根据你的操作系统默认语言使用了 GBK 编码

解决:打开 Tomcat 安装目录下的 logging.properties,类似如下路径

  1. C:\Program Files\apache-tomcat-8.5.71-windows-x64\apache-tomcat-8.5.71\conf\logging.properties

修改大约第 47 行的

  1. java.util.logging.ConsoleHandler.encoding = UTF-8

  1. java.util.logging.ConsoleHandler.encoding = GBK

  • 打开网页 404

    原因:URL 写错了,定位不到文件

    解决:Edit Configuration 中检查一下 URL 是否与端口设置一致,是否正确定位了文件路径

  • 输出一堆红色字

    正常现象,开发者选色鬼才

  • 网页调试的方法

    运行之后修改了代码,怎么才能重新看到修改后的网页呢?

    无需终止 Tomcat 重新运行,只需在左下这个位置点击 Deploy,然后刷新网页就可以啦

如果没有问题此时应该可以正确运行啦,开始在 IDE 中愉快的写 JSP 吧(雾


\[QAQ
\]

基本语法

因为了解不深,详细的就不多说了。

除了特别的这几个,其他的都和 HTML 与 Java 语法规则差不多。

脚本

  1. <%
  2. //在这里编写你的Java代码
  3. %>

任何文本、HTML 标签、JSP 元素必须写在脚本程序的外面

声明

  1. <%!
  2. //Java
  3. %>

用于声明变量、方法,要写函数只能在这里面

必须先声明才可以使用

表达式

  1. <%= //Java %>

表达式里面的代码可以不写分号

注释

  1. <%-- 该部分注释在网页中不会被显示 --%>
  2. <!-- 该部分注释在网页源代码中会被显示 -->

指令

  1. <%@ page 页面属性 %>
  2. <%@ include 包含文件 %>
  3. <%@ taglib 标签 %>

模板

  1. <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>
  2. <!--导入的Java包-->
  3. <html>
  4. <head>
  5. <title>网页标题</title>
  6. </head>
  7. <body>
  8. <%!
  9. //定义变量
  10. %>
  11. <%!
  12. //定义函数
  13. %>
  14. <%
  15. //脚本
  16. %>
  17. <!-- 在这里定义其他网页上展示的组件 -->
  18. </body>
  19. </html>

示例:计算 N 的阶乘

  1. <%@ page contentType="text/html;charset=UTF-8" language="java" %>
  2. <html>
  3. <head>
  4. <title>Calc</title>
  5. </head>
  6. <body>
  7. <div style="text-align: center;"/>
  8. <h1>
  9. Calculate N!
  10. </h1>
  11. <!--*.jsp-->
  12. <form action="index.jsp"/>
  13. <input type="number" name="num"/><br/><br/>
  14. <input type="submit"/><br/><br/>
  15. <form/>
  16. <%!
  17. private int n = -1;
  18. %>
  19. <%!
  20. public int fac(int n) {
  21. if (n < 0) {
  22. return n;
  23. } else if (n == 0) {
  24. return 1;
  25. } else {
  26. int product = 1;
  27. for (int i = 1; i <= n; i++) {
  28. product *= i;
  29. if (product < 0) {
  30. break;
  31. }
  32. }
  33. return product;
  34. }
  35. }
  36. %>
  37. <%
  38. try {
  39. int n = fac(Integer.parseInt(request.getParameter("num")));
  40. if (n < 0) {
  41. out.print("<h2>invalid</h2>");
  42. } else {
  43. out.print("<h2>"+n+"</h2>");
  44. }
  45. } catch (Exception e) {
  46. //ignore java.lang.NumberFormatException: null
  47. }
  48. %>
  49. </body>
  50. </html>

示例:数据库查询系统

  • 依赖包:mysql-connector-java-5.1.*.jar
  • 可能需要将 jar 包拷贝到项目路径下的 WEB-INF/lib 中(不存在就新建)
  1. <%@ page contentType="text/html;charset=UTF-8" language="java" %>
  2. <%@ page import="java.sql.*" %>
  3. <%@ page import="java.io.*" %>
  4. <html>
  5. <head>
  6. <title>Database Query System</title>
  7. </head>
  8. <body>
  9. <div style="text-align: center;">
  10. <h1>Database Query System</h1>
  11. <h2>powered by bipy</h2><br/>
  12. <form method="post">
  13. <textarea name="SQL_statement" rows=10 cols=100></textarea><br/>
  14. <input type="submit" name="Submit"/>
  15. <input type="reset" name="Clear"/>
  16. </form>
  17. </div>
  18. <br/>
  19. </body>
  20. <%!
  21. private Statement statement;
  22. private String sql_input;
  23. private Connection connection;
  24. private boolean status = false;
  25. %>
  26. <%!
  27. //判断SQL语句类型,并返回结果(影响个数/报错/结果集)
  28. public Object process(String sql) {
  29. try {
  30. if (sql.toLowerCase().matches("^(update|create|use|drop|delete|insert).*$")) {
  31. return statement.executeUpdate(sql);
  32. } else if (sql.toLowerCase().matches("^(show|select).*$")) {
  33. return statement.executeQuery(sql);
  34. } else {
  35. return "Not Supported";
  36. }
  37. } catch (SQLException e) {
  38. e.printStackTrace();
  39. return "SQL syntax error";
  40. }
  41. }
  42. %>
  43. <%
  44. try {
  45. //避免重新建立连接而丢弃前面步骤
  46. if (!status) {
  47. Class.forName("com.mysql.jdbc.Driver");
  48. connection = DriverManager.getConnection("jdbc:mysql://localhost", "root", "123");
  49. statement = connection.createStatement();
  50. status = true;
  51. }
  52. } catch (Exception e) {
  53. e.printStackTrace();
  54. }
  55. %>
  56. <div style="text-align: center">
  57. <%
  58. //结果输出
  59. sql_input = request.getParameter("SQL_statement");
  60. if (sql_input != null) {
  61. Object rt = process(sql_input);
  62. if (rt instanceof String) {
  63. out.print("<h2>" + rt.toString() + "</h2>");
  64. } else if (rt instanceof Integer) {
  65. out.print("<h2>" + "Query OK. " + rt + " effected." + "</h2>");
  66. } else {
  67. ResultSet rs = (ResultSet) rt;
  68. ResultSetMetaData rsmd = rs.getMetaData();
  69. out.println("<table align=\"center\" border=\"1\">");
  70. out.println("<tr>");
  71. for (int i = 1; i <= rsmd.getColumnCount(); ++i)
  72. out.println("<th>" + rsmd.getColumnName(i) + "</th>");
  73. out.println("<tr>");
  74. while (rs.next()) {
  75. out.println("<tr>");
  76. for (int i = 1; i <= rsmd.getColumnCount(); ++i)
  77. out.println("<td>" + rs.getString(i) + "</td>");
  78. out.println("</tr>");
  79. }
  80. out.println("</table>");
  81. }
  82. }
  83. %>
  84. </div>
  85. </html>

JSP 简单入门与 IDEA 开发环境配置的更多相关文章

  1. Kinect for Windows SDK开发入门(一):开发环境配置

    [译]Kinect for Windows SDK开发入门(一):开发环境配置 前几天无意中看到微软发布了Kinect for windows sensor,进去看了一下Kinect应用的例子,发现K ...

  2. 最简单的VScode Python 开发环境配置以及中文化

    前置条件 Python 3.X(2020年了,建议使用Python3.X版本) 一.下载VSCode VSCode官方下载链接 由于安装过程是中文界面,此处略过. 二.VSCode中文化 不需要配置什 ...

  3. 【OpenCV入门教程之一】 安装OpenCV:OpenCV 3.0 +VS 2013 开发环境配置

    图片太多,具体过程参照: [OpenCV入门教程之一] 安装OpenCV:OpenCV 3.0.OpenCV 2.4.8.OpenCV 2.4.9 +VS 开发环境配置 说下我这边的设置: 选择deb ...

  4. 【OpenCV入门教程之一】 安装OpenCV:OpenCV 3.0、OpenCV 2.4.8、OpenCV 2.4.9 +VS 开发环境配置

    本系列文章由@浅墨_毛星云 出品,转载请注明出处.   文章链接:http://blog.csdn.net/poem_qianmo/article/details/19809337 作者:毛星云(浅墨 ...

  5. Ionic 入门与实战之第二章第一节:Ionic 环境搭建之开发环境配置

    原文发表于我的技术博客 本文是「Ionic 入门与实战」系列连载的第二章第一节,主要对 Ionic 的开发环境配置做了简要的介绍,本文介绍的开发环境为 Mac 系统,Windows 系统基本类似,少许 ...

  6. 【OpenCV入门教程之一】 OpenCV 2.4.8 +VS2010的开发环境配置

    目录(?)[-] 因为读研期间的研究方向是图像处理所以浅墨这段时间闭门研究了很多OpenCV和图像处理相关的知识与内容眼看自己积累到一定的程度了于是决定开始开设这个OpenCV系列专栏总结自己所学也分 ...

  7. Java入门 - 语言基础 - 02.开发环境配置

    原文地址:http://www.work100.net/training/java-environment-setup.html 更多教程:光束云 - 免费课程 开发环境配置 序号 文内章节 视频 1 ...

  8. XE4 IOS开发环境配置

    l 配置IOS的安装开发环境 使用RAD XE4开发IOS程序,一台MAC是必须的(也可以用虚拟机), MAC上需要安装Xcode, 独立版本的Commnand Line Tools 以及RAD的pa ...

  9. 安装OpenCV:OpenCV 3.0、OpenCV 2.4.8、OpenCV 2.4.9 +VS 开发环境配置

    1.下载和安装OpenCV SDK     VS2010不用说,肯定都安装了吧.来说说当前最新的OpenCV版本2.4.8(2014年2月24日),2.4.9 (2014年4月)的下载和安装.与其说是 ...

  10. Python开发环境配置

    好久没有写博客了,自从6月份毕业后,进入一家做书法.字画文化宣传的互联网公司(www.manyiaby.com),这段时间一直在进行前端开发,对于后端的使用很少了,整天都是什么html.css.jav ...

随机推荐

  1. Java——面向对象(static关键字开始)

    一.static 可以修饰成员变量和成员方法 关键字特点: 随着类的加载而加载: 优先于对象存在: 被类的所有对象共享: 可以通过类名直接调用: 注意事项: 在静态方法中是没有this关键字的 静态的 ...

  2. Macbook磁盘系统结构/文件/目录介绍分析

    1. 系统磁盘根目录详解: 1.1 磁盘根目录结构 / (根目录)|-- Applications # 存放应用程序|-- Users # 存放用户文件和设置|-- cores # 存放核心转储文件, ...

  3. 汽车制造业PMC组态应用最佳实践

    01 案例及行业介绍 汽车制造工业是我国国民经济的重要支柱产业,汽车制造工厂一般包含冲压.焊装.涂装.总装四大车间.每辆汽车的生产过程被分解成很多加工任务下发给各个车间进行完成.车辆从冲压车间开始到总 ...

  4. jenkins安装部署、主从架构、slave镜像、K8S对接

    介绍 CI/CD工具,自动化持续集成和持续部署,用于构建各种自动化任务. 官方提供了docker镜像https://hub.docker.com/r/jenkins/jenkins 使用Deploym ...

  5. 组合式api-ref引用子组件、dom元素, defineExpose的使用

    和vue2一样,我们有时候希望父组件能够调用子组件中的方法.属性.那么就要用到ref. 然后你会发现,根本调用不了子组件中的方法"sonSayHi",如下图: 原因: 使用

  6. ElasticSearch快照备份、还原

    快照备份 备份和还原的前提:在配置文件elasticsearch.yml中设置path.repo path.repo: ["D:\\elasticsearch-6.8.23\\elastic ...

  7. 华企盾DSC防泄密:有一个文件申请解密失败,提示拒绝访问(密钥不对)

    解决方法:将文件拖到加密进程中提示密钥不对,找到原来的数据库还原解密

  8. NLP复习之朴素贝叶斯

    朴素贝叶斯分类器和加一平滑计算每个单词的似然值 贝叶斯规则:c表示类别,d表示数据 \[P(c|d) = \frac{P(d|c)P(c)}{P(d)} \] 例题1 假设句子"I alwa ...

  9. Office 2016 2019 2021 正版部署

    教学视频:https://www.youtube.com/watch?v=VSjRx7Hoa60 文章摘抄自零度解说:https://www.freedidi.com/6619.html 1.offi ...

  10. curl使用小记(四)——在多线程中使用的问题总结

    目录 1. 概述 2. 详论 2.1. 崩溃 2.2. 初始化 2.3. 性能 3. 参考 1. 概述 很显然,通过URL传输数据是一个耗费性能的行为.所以,一个非常有必要的策略是通过多线程来加快数据 ...