文章目录
手动实现一个servlet程序
-
编写一个类去实现Servlet接口
- 新建一个HelloServlet的java类
-
实现Servlet方法,处理请求,并相应数据
-
,然后继承HttpServlet接口,重写doGet方法
-
-
到web-xml去配置Servlet访问地址
-
到浏览器去访问配置的servlet地址
-
查看idea控制台返回的数据
设置工程路径
-
点击Edit Configurations…
-
下面这个就是工程路径,可以更改
使用idea创建一个Servlet程序
右键包名,new一个Servlet程序,接着输入Servlet程序名,然后就创建了一个Servlet程序
创建好的Servlet程序会自动帮我们继承HttpServlet接口,自动重写doGet方法和doPost发法,但是不会帮我们把web-xml配置好,所以我们还需要配置web-xml
配置web-xml
没有创建servlet选项的解决办法
菜单选项中没有Servlet选项
解决办法:
然后就可以使用idea自动创建servlet项目了
Get请求和Post请求
实例
在Servlet1中编写代码
在web目录下创建一个a.html 编写代码
method:选择提交方式
运行tomcat,浏览器输入地址,点击提交,浏览器跳转到页面
查看idea输出,输出了doGet方法里面的内容
Get请求有哪些:
1)form标签 method = get
2)a标签
3)link标签引入css样式
4)Script标签引入js样式
5)img标签引入图片
6)iframe标签引入HTML页面
7)浏览器地址栏中输入地址后敲回车
Post请求有哪些:
1)form标签 method = post
HttpServletRequest类
HttpServletRequest类有什么用:
每次只要有请求进如到tomcat服务器中,tomcat服务器就会把请求过来的Http协议信息解析好封装到request对象中,然后传递到servlet方法(doGet或doPost)中,我们可以通过HttpServletRequest对象,获取到所有的请求信息。
HttpServletRequest类常用方法:
-
getRequestURL() 获取请求的统一资源定位符(绝对路径)
-
getRequestURI() 获取请求的资源路径
-
getRemoteHost() 获取请求的ip地址
-
getHeader() 获取请求头
-
getParameter() 获取请求的参数
-
getParameterValues() 获取请求的参数(多个值的时候使用)
-
getMethod() 获取请求的方式
-
setAttribute() 设置域数据
-
getAttribute() 获取域数据
-
getRequestDispatcher() 获取请求转发对象
-
setCharacterEncoding(“utf-8”) 设置post传输字符编码
Get请求接收参数
代码:
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// 1. getRequestURL() 获取请求的统一资源定位符(绝对路径)
System.out.println("URL = > "+request.getRequestURL());
// 2. getRequestURI() 获取请求的资源路径
System.out.println("URI = >" +request.getRequestURI());
// 3. getRemoteHost() 获取请求的ip地址
System.out.println("IP地址 = > "+request.getRemoteHost());
// 4. getHeader() 获取请求头
System.out.println("user-agent请求头 = >"+request.getHeader("User-Agent"));
// 7. getMethod() 获取请求的方式
System.out.println("请求方式:"+request.getMethod());
}
运行结果:
例子:getParameter() getParameterValues()
创建一个简单的提交页面
然后创建一个servlet程序
注:因为getParameterValues()是获取多个数,所以要用Arrays.asList将数组转换为集合
运行结果:
Post请求接收参数
使用post请求会表单时,会出现中文乱码
所以我们要先在请求时设置post传输字符编码
setCharacterEncoding(“utf-8”)
HttpServletResponse类
HttpServletResponse类和HTTPServletRequest类一样,每次请求进来,tomcat服务器都会创建一个Response对象传递给Servlet程序去使用。HTTPServletRequest表示请求过来的信息,HttpServletResponse表示所有响应的信息
如果我们需要设置返回给客户端的信息,都可以通过HttpServletResponse对象来进行设置。
两个输出流
字节流 getOutputStream();
字符流 getWriter();
两个流只能使用一个
往客户端回传数据
回传数据时,必须设置字符编码,否则看不懂
代码:
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
resp.setContentType("text/html; charset = utf-8");
PrintWriter out = resp.getWriter();
out.print("学习就是最好的休息");
}
Servlet请求转发
什么是请求的转发:
请求转发是指,服务器收到请求后,从一次资源跳转到另一个资源的操作叫请求转发。
图解:
流程:
-
第一个servlet程序获取请求的参数
-
设置域数据
-
获取请求转发的对象(第二个servlet程序)
-
跳转到第二个servlet程序
-
第二个servlet程序获取请求的参数
-
获取域数据
-
执行自己的业务
第一个servlet程序截图:
第二个servlet程序截图:
特点:
请求转发的特点:
浏览器地址栏没有变化
他们是一次请求
他们可以共享Request域中的数据
可以转发到web-inf目录下
不可以访问工程外的资源
Servlet请求重定向
什么是请求重定向:客户端访问服务器,然后服务器给客户端一个新的地址,客户端去访问
图解:
流程:
-
浏览器访问第一个servlet程序
-
servlet程序告诉客户端新的地址
-
客户端从新访问新的地址
截图:
代码
response.setHeader("location","http://localhost:8080/01Servlet/response2");
第二种写法(推荐):
代码:
response.sendRedirect("http://localhost:8080/01Servlet/response2");
特点:
- 浏览器地址栏会发生变化
- 发生两次请求
- 不共享Request域中的数据
- 不能进入web-inf目录
- 可以访问工程以外的地址
Base标签
所有相对路径在工作时候都会参照当前浏览器地址栏中的地址来进行跳转
用法:忽略浏览器地址栏的地址,使用自己定义的地址
写法:
<base href = "地址">
例子:
在web目录下建立index.html,在index.html中建立跳转到c.html的链接到servlet程序的链接
在web目录下建立里a目录,a目录下建立b目录,b目录下建立c.html 在c.html中建立跳转到index.html的链接
在servlet程序中,请求转发到c.html
代码截图:
index.html
servlet程序截图
c.html截图