javaee学习第一天_Java服务器端小应用
简单写一下重要的知识点
1.servlet的书写流程
1.首先写一个class类,继承HttpServlet
2.重写service方法,把super.serice()去掉
3.进行动态网页的开发
4.配置web.xml
5.在网页中访问,输入自定义的url-pattern即可(缺点:由于在servlet中书写网页比较繁琐,所以这种方法不再使用,被jsp代替)
其中web.xml的配置这里给出一个例子
<servlet>
<servlet-name>Servlet01</servlet-name>//名字任意起就好
<servlet-class>com.bjsxt.servlet.Servlet01</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>Servlet01</servlet-name>//和上面的标签里必须一样
<url-pattern>/sevlet/Servlet01</url-pattern>//访问的路径
</servlet-mapping>
2.乱码的处理
2.1页面乱码的处理
<head>
<!--告诉浏览器以什么字符集解析网页-->
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
今天好热
</body>
</html>
2.1.2请求信息乱码
post请求乱码
点击查看代码
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
/*设置post方式提交的数据包字符集为UTF-8
该字符集必须和当前项目编码一致*/
req.setCharacterEncoding("UTF-8");
String username = req.getParameter("username");
System.out.println("接收到数据:"+username);
}
get请求乱码
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
/*
* get方式提交的数据不在数据包上 在url地址栏上
* 1手动编码解码
* 2设置tomcat url的编码方式
* */
req.setCharacterEncoding("UTF-8");
String username = req.getParameter("username");
System.out.println("接收到数据(未转码):"+username);
/*将数据还原会字节*/
byte[] bytes = username.getBytes("ISO-8859-1");
/*将字节通过UTF-8 重构成字符串*/
String info=new String (bytes,"UTF-8");
System.out.println("接收数据(已转码):"+info);
}
通过设置Tomcat 解决GET乱码问题 设置 conf/server.xml
URIEncoding=”UTF-8”

2.1.3响应信息乱码
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//*设置响应对象 resp 响应数据的编码为UTF-8*/
resp.setCharacterEncoding("UTF-8");
/*设置Content-Type响应 头 告知浏览器以UTF-8解析信息*/
resp.setContentType("text/html;charset=UTF-8");
PrintWriter writer = resp.getWriter();
writer.write("<h2>这里是中文</h2>");
2.1.4idea中tomcat catalinalog乱码

设置tomcat下conf/logging.properties中的所有UTF-8 改成GBK即可
或者在vm options后加入 VM option:-Dfile.encoding=UTF-8

1.1.3 获取请求数据
在Servlet获取请求数据的方式
req.getParameter("key")://根据key获取指定value。
|
String str = req.getParameter("key"); |
获取复选框(checkbox组件)中的值
eq.getParameterValues("checkboxkey")://获取复选框(checkbox组件)中的值,返回一个String[]。
|
String[] userlikes = req.getParameterValues("checkboxkey"); |
获取所有提交数据的key
req.getParameterNames()://获取请求中所有数据的key,该方法返回一个枚举类型。
|
Enumeration<String> parameterNames = req.getParameterNames(); |
使用Map结构获取提交数据
req.getParameterMap()://获取请求中所有的数据并存放到一个Map结构中,该方法返回一个Map,其中key为String类型value为String[]类型。
|
Map<String, String[]> parameterMap = req.getParameterMap(); |
设置请求编码
req.setCharacterEncoding("utf-8")
请求的数据包基于字节在网络上传输,Tomcat接收到请求的数据包后会将数据包中的字节转换为字符。在Tomcat中使用的是ISO-8859-1的单字节编码完成字节与字符的转换,所以数据中含有中文就会出现乱码,可以通过req.setCharacterEncoding("utf-8")方法来对提交的数据根据指定的编码方式重新做编码处理。
前端代码
|
<form action="servlet1" method="get"> 如果text不输入 后台获取的是 "" 不是null
|
后台代码
|
public class Servlet4 extends HttpServlet {
|
1.1.4 HttpServletRequest对象的生命周期
当有请求到达Tomcat时,Tomcat会创建HttpServletRequest对象,并将该对象通过参数的方式传递到我们Servlet的方法中,当处理请求处理完毕并产生响应后该对象生命周期结束。
1.2 HttpServletResponse对象
回顾http响应:
http响应部分可以分为三部分:响应行,响应头,响应体
响应行
|
响应协议 状态码 状态描述 HTTP/1.1 200 OK |
响应状态码列表如下

设置响应格式
1.2.2设置字符型响应
resp.setContentType("text/html"):
设置响应类型为文本型,内容含有html字符串,是默认的响应类型
resp.setContentType("text/plain"):
设置响应类型为文本型,内容是普通文本。
resp.setContentType("application/json"):
设置响应类型为JSON格式的字符串。
1.2.3设置字节型响应
常见的字节型响应:
resp.setContentType("image/jpeg"):
设置响应类型为图片类型,图片类型为jpeg或jpg格式。
resp.setContentType("image/gif"):
设置响应类型为图片类型,图片类型为gif格式。
1.2.4设置响应编码
response.setCharacterEncoding("utf-8");
设置服务端为浏览器产生响应的响应编码,服务端会根据此编码将响应内容的字符转换为字节。
response.setContentType("text/html;charset=utf-8");
设置服务端为浏览器产生响应的响应编码,服务端会根据此编码将响应内容的字符转换为字节。同时客户端浏览器会根据此编码方式显示响应内容。
1.2.5在响应中添加附加信息
文件下载
在实现文件下载时,我们需要修改响应头,添加附加信息。
|
response.setHeader("Content-Disposition", "attachment; filename="+文件名); |
Content-Disposition:attachment
该附加信息表示作为对下载文件的一个标识字段。不会在浏览器中显示而是直接做下载处理。
filename=文件名,
表示指定下载文件的文件名。
请求转发和重定向响应
请求转发
代码示例:
|
req.getRequestDispatcher("/login").forward(req,resp); |
特点
- 请求转发是一次请求内,地址栏地址不变。
- 请求转发内的Servlet共享一个request对象。
- 请求转发是TOMCAT 内部的行为,用户是看不到的。
- 可以使用setAttribute(String name,Object value)和getAttribute(String name) 实现请求转发内的Servlet的数据的流转。
重定向学习
特点:
- 重定向两次请求,地址栏信息改变。
- 重定向的地址是浏览器接收到响应后,自主的直接跳转了,用户不参与。
- 两次请求,request对象是不同的
代码示例:
|
//在重定向的路径中,第一个"/"表示服务器根目录 |
响应重定向的总结
1两个web组件不共享Request对象,请求中的参数不可以直接传递
2浏览器地址栏有变化,浏览器发送了多次请求
3不仅可以转发到servlet 上 还可以重定向到页面,达到页面跳转的效果
4不能访问WEB-INF安全目录下的资源
5能跨域访问外部资源
6响应重定向是浏览器自主访问其他资源的行为
请求转发和重定向的比较

请求转发(查询):
请求转发一次请求,TOMCAT服务器内部的行为,共享同一个Request对象。
一次请求就将用户的需求完整的处理完毕。一般用户发起的查询功能会使用请求转发来完成请求的处理以及结果的响应。而增,删,改的请求,TOMCAT在处理的时候使用请求转发完成整体的处理,因为请求转发的地址栏信息是不改变的,容易造成用户刷新一次页面就重新增,删,改了一次(造成表单重复提交)。
重定向(增,删,改):
两次请求,地址栏信息改变,一般用户的增,删,改请求会使用重定向来显示处理结果。
目的是保护第一次的请求,避免用户因为刷新页面造成数据的重复提交。

浙公网安备 33010602011771号