-author qx
-version 1.0.3
-GreatTime 2023-03-05
1. new 建一个项目 起名(javaWeb_demo?) 加入到 import idea projects 里 点ok
2. 右键项目名 点击 (add Framwork Support... (这个东西叫添加框架支持))
然后 勾选Web Application 点ok
3.点完之后 项目就变了 下面多了一个叫web的文件夹,展开web 右键里面的WEB-INF,
new一个Directory(文件夹,取名为lib) 然后回到 tomcat的lib 找到 servliet.api.jar
复制 粘贴到 lib 里面 点ok 。
4.选中jar包 右键 点击 Add as Library... (添加jar包就找它) ok
5.配置tomcat 点击右上角长方形方块 (Add Configuration...)
6. 点击+号 找tomcat Server 点击 local
7.点击 configure... 传入tomcat 的文件路径 ok
8. 配完之后 再点击 configure... (在Application server后面的小方框里面 选中自己添加的那一个)
9, 再往下配置浏览器 , 再点下一页 Deloyment , 找第一框框,点击+号 ,
10. 添加 第一个Artifact... 选完之后下面又多了一行东西叫做 Application context ,第二个框框
把里面的一行字符全部删除,只留一个"/" 选完之后 apply(应用) ok
11.配完之后 再次点击右上角的方块 点击 Edit configurations 修改一下 Server 的 On 'Update' action: 选项 设置为热部署
: (Update calsses and resources) 下面那行也设置一样的 先应用 后ok
配置完成 如果直接运行的话(点击Services快捷工具栏 ,可以看到一个绿色的回形针一样的指示图形,点
击一下就可以进行运行了) 运行完以后会执行index.jsp里面的 类似前端的 代码 并且显示到前端( 并且浏览器地址栏显示的是
localhost:8080
13(注意:1. 一定要关闭tomcat的启动项 (因为tomcat的默认端口是8080, 并且我们为项目配置的默认端口也是8080, 如果不关闭
启动项并启动项目的 会显示项目的8080端口 is used in ,当然不关也可以,但需要为我们的项目配置一个新的端口 点击 Edit configurations
(注意这里是配置完之后点击 E...s, 如果是刚开始配置的时候应该点击 Add Configuration...) 继续点击Server 找到下面的Http port
修改一下 比如 修改成 8081 前提是8081这个端口不被占用 再运行 还是跳转到浏览器并且显示index.jsp 里的内容, 但是浏览器的地址栏会显示
localhost:8081
2. 一定要联网 )
14. 在项目的src里面 new 包 然后在右键 创建一个 Servlet 的类(其实就是普通类继承了HttpServlet)
起名(StudentServlet)
15. 重写HttpServlet 的 service 的方法 (修饰符为protected) (idea可能自动生成 ,手动 :service + 回车 (写在Student
Servlet类里面) 删除 重写后service方法里的super....
16. 在重写后的方法里面 ,敲入 System.out.println(123); 下一步 到web-->WEB-INF-->lib-->
web.xml 进行配置 在 web-app 这个标签里面
15.配置两个东西 , 首先第一个 是
<servlet>
<servlet-name> StudentServlet </servlet-name>
<servlet-class> com.qx.StudentServlet </servlet-class>
</servlet>
16. <servlet-name> StudentServlet </servlet-name> 的 StudentServlet 里面会出现一个红色的
波浪线需要 一个 映射 <servlet-mapping>
17
<servlet>
<servlet-name> StudentServlet </servlet-name>
<servlet-class> com.qx.StudentServlet </servlet-class>
</servlet>
后面加入
<servlet-mapping>
<servlet-name> StudentServlet </servlet-name> 名字要一样
<url-pattern> /stu </url-pattern>
</servlet-mapping>
18. 然后点击 Services 快捷 窗口进行 运行 ,运行完以后会先 执行 index.jsp (浏览器地址栏显示 localhost:你配置的端口号)
然后可以再地址栏的后面加上/stu 接着运行 (点击浏览器的刷新按钮) 然后就什么也没看到 ,因为我们在StudentServlet类中
所写的System.out.println(123) 并不会运行到前端(浏览器) 而是 在控制台输出 123
19. 让123 输出到前端页面里面 怎么弄?
20 . 在StudentServlet 中 的 重写的service方法中 使用 HttpServletReponse(当前参数为resp)中的 getWriter的方法 返回一个
PrinWriter 的值 "writer " 再使用 writer.writer(“需要再前端显示的内容”)
PrinterWriter writer = resp.getWriter();
writer.write("123");
21. 注意 : 当writer.writer()后 一定要在 运行一下 (相当于刷新) 然后在 地址栏后面添加 /stu
就可以显示 writer方法的内容了
22. writer.writer("<h1> qqq</h1>"); 注意: 使用这个代码 因为里面是html格式的 所以上面的不是 html格式的 要删除
否则 里面的标签不会生效 比如 qqq 不会变大
(注意) 输出的结果是中文的话 需要 设置编码 resp.setContentType("text/html;charset = utf-8"); 而且一定要写在第一句
23.都知道一个项目需要占用一个端口号 , 但我所创建的两个项目占用的是同一个端口号 所以运行其中一个项目时,后台不能有另外一个
”Web“项目 也就是需要关闭 (打个×就好了)
24. 想要运行两个Servlet类(并不是同时) 1. new 一个 Servlet 类 2. 在web.xml 再配置一下 <Servlet>以及它的映射
25. @WebServlet(name = "ServletStudent",value = "/stu") 使用注解的话 就不用配置 web.xml 了(本质上还是配置了web.xml) (注解写在Servlet类的上面 )
26. 添加jdbc链接技术
1.分包 com.qx.Utils com.qx.Servlet
2.将 封装好的工具类 导入 com.qx.Utils 下 原先的StudentServlet导入 com.qx.Servlet
3.将jdbc jar 包 导入lib 文件 as library
4.使用工具类 .方法 输出到控制台
//输出到控制台
String sql = "select * from Student";
List<Map<String, Object>> list = DAOUtil.executeQuery(sql);
System.out.println(list);
27. 让list集合中的内容输出到前端 (localhost:8080/stu)
//展现到前端
PrintWriter writer1 = resp.getWriter();
writer1.write("<table border ='1'>");
//遍历集合 增强for循环 foreach 9.48 map.get() 通过它的key值获取里面的数据
for(Map<String,Object> map:list){
writer1.write("<tr>");
writer1.write("<td>"+map.get("id")+"</td>");
writer1.write("<td>"+map.get("name")+"</td>");
writer1.write("<td>"+map.get("age")+"</td>");
writer1.write("<td>"+map.get("address")+"</td>");
writer1.write("</tr>");
}
writer1.write("</table>");
版本为 2021.1.3 点击下方 Services 即可运行
28 数组介绍:
假设有一个数组,采用 for 语句遍历数组的方式如下:
// 声明并初始化数组
int[] numbers = { 43, 32, 53, 54, 75, 7, 10 };
System.out.println("----for----");
// for语句
for (int i = 0; i < numbers.length; i++) {
System.out.println("Count is:" + numbers[i]);
}
上述第 2 行语句声明并初始化了 7 个元素数组集合,目前大家只需要知道当初始化数组时,要把相同类型的元素放到 {…} 中并且用逗号分隔(,)即可。
这里我们只需要大概了解就可以。numbers.length 是获得数组的长度,length 是数组的属性,numbers[i] 是通过数组下标访问数组元素。
// 声明并初始化int数组 使用增强for循环
int[] numbers = { 43, 32, 53, 54, 75, 7, 10 };
System.out.println("----for each----");
for (int item : numbers) {
System.out.println("Count is:" + item);
}
for(要遍历的元素类型(被包含在被遍历的元素里面) 变量名 : 被遍历的元素){
System.out.println(变量名);
}
29 页面跳转
//需要前端与后端的交互需要使用一个载体 HttpSession 九大内置对象的一个
HttpSession session = req.getSession();
//传入参数
session.setAttribute("c","降谷萌路");
//第一个参数 是 !数据!(“c”)的名字 , 第二个是 数据(“降谷萌路”)。
//设置参数以后就可以直接在index.jsp里面进行访问:
//1. 使用 <% %> 这里面可以写java代码
//2. <%= %> 这里面可以直接输出变量值
//这两个都需写在 index.jsp 的body标签里面
//使用 session.getAttribute("数据名字(c)") 获取一个Object类型的值
// Object x = session.getAttribute("c");
//输出 x <%= x %> 运行 localhost:port
/**
* 页面跳转
* 在web文件夹里new 一个 new.jsp 按以下代码运行就好了
*/
// req.getRequestDispatcher("/new.jsp").forward(req,resp);
//(第一种情况)如果没有页面跳转这行代码 , 会 执行 localhost:8080 先输出的是 index.jsp 并输出null , 加上/stu03 运行 在去掉/stu03 才会看到降谷萌路
/**
* 为什么? index(local host:8080)开始为null 后面 又输出了 “降谷萌路”
* 重点: 当点击Services的运行箭头时,首先执行index.jsp 里面的内容 (!!!这里并没有执行StudentServlet03!!!)
* 即使 index.jsp 有:
* Object x = session.getAttribute("x");
* 但因为没有运行StudentServlet03这个类 , 类里面的HttpSession session = req.getSession();和
* session.setAttribute("x","降谷萌路"); 这两行代码都没有执行 也就是根本没有session 更别谈set session
* 所以运行的结果(local host:8080) 为空
*
* 但当我们加入/stu03以后它就会执行StudentServlet03里面的代码
* 也就会执行我们的 HttpSession session = req.getSession();和
* * session.setAttribute("x","降谷萌路");
*
* 所以再当加入/stu03 ---> (运行StudentServlet03) 再去掉的/stu03 (这时候已经运行了StudentServlet03)
* 刷新界面 (localhost:8080) 就会显示刚才未显示的 "降谷萌路"
*/
//(第二种情况)有页面跳转 运行完跳到localhost页面并且为null 在加上/stu03 (等于运行StudentServlet03)所以也就执行
页面跳转语句 会执行new.jsp 里面的dsf
(原理和第一种情况一样)