1.什么是servlet
Java Servlet 是运行在 Web 服务器或应用服务器上的程序,它是作为来自 Web 浏览器或其他 HTTP 客户端的请求和 HTTP 服务器上的数据库或应用程序之间的中间层。
2.建servlet 第一种配置方式
在web.xml文件中(麻烦)
<!-- 第一种配置servlet -->
<!-- 注册servlet -->
<servlet>
<!-- servlet的名称:任意写 -->
<servlet-name>demo1</servlet-name>
<!-- serlvet类的全限定名称 -->
<servlet-class>com.as.Demo1Servlet</servlet-class>
</servlet>
<servlet-mapping>
<!-- servlet的名称与上面的名称必须相同 -->
<servlet-name>demo1</servlet-name>
<!-- serlvet的映射地址:访问servlet地址
必须要以/开头.地址名称任意写
-->
<url-pattern>/demo1</url-pattern>
</servlet-mapping>
3.servlet第二种配置方式
//第二种配置servlet 通过注解@WebServlet("/映射地址"),必须要以/开头
//推荐使用注解版的配置servlet
//@WebServlet("/demo2")
//@WebServlet("/users/list") 第一个"/"表示项目的根目录,其它"/"代表路径分隔符
@WebServlet("/users/list")
public class Demo2Servlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("demo2Servlet ...get/post请求");
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
this.doGet(req, resp);
}
}
4.为什么要配置servlet
1.告诉servlet容器(如tomcat),我需要提供XX功能的servlet;
2.我可以通过哪个url访问这个servlet;
3.很多servlet可以提供更灵活的功能,这时候可能需要事先配置(提供)一些参数给它。
因此配置相当于注册你写的servlet,因为你自己写的或者第三方包里面会包含各种功能的servlet,如果不注册直接启用会消耗资源,而且也不知道该通过哪个url地址访问这些servlet。
4.servlet版本的登录
@WebServlet("/userlogin")
public class UserLoginServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// request请求对象:客户端向服务器发出请求
// response响应对象:服务器响应客户端请求
//接地址栏中参数的值或接收表单传来的值
//admin/admin
String uname=request.getParameter("uname");
String upwd=request.getParameter("upwd");
//判断是否成功
if(uname.equals("admin") && upwd.equals("admin"))
{
//session对象:会话对象,用来跟踪用户,防止页面没有授权登录.
//只要不关闭浏览器,该对象一直能使用.所有的浏览器页面都关闭session就没有了.
// 键 值
// key value
//得到session对象
HttpSession session=request.getSession();
session.setAttribute("uname", uname);
//页面重定向:从一个地址跳转到另一个地址(跳转)
response.sendRedirect("/web4/success.jsp");
}
else
{
//页面重定向:从一个地址跳转到另一个地址(跳转)
response.sendRedirect("/web4/error.jsp");
}
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
this.doGet(req, resp);
}
}
5.jsp和servlet的区别
1.JSP是Servlet技术的扩展,本质上就是Servlet的简易方式。JSP编译后是“类servlet”。(jsp本质上就是servlet)
2.Servlet和JSP最主要的不同点在于,Servlet的应用逻辑是在Java文件中,并且完全从表示层中的HTML里分离开来。而JSP的情况是Java和HTML可以组合成一个扩展名为.jsp的文件。(jsp中把java代码嵌入在html中,Servlet把html嵌入java代码中)
3.JSP侧重于视图显示,Servlet主要用于控制业务逻辑。
4.jsp有内置对象,servlet没有.
6.servlet转发的使用
//把数据封装到request作用域中(对象)
request.setAttribute("name", "沈阳人");
request.setAttribute("list", list);
//转发
//request.getRequestDispatcher("/list.jsp").forward(request, response);
//"/admin/users/list.jsp" 第一个"/"代表项目的根目录
request.getRequestDispatcher("/admin/users/list.jsp").forward(request, response);
7.转发和重定向的区别
1.转发页面的URL不会改变,而重定向地址会改变(浏览器地址栏)
2.转发比重定向快
3.转发可以访问相对路径和绝对路径的资源,而重定向只能访问绝对路径的资源
// "/admin/users/list.jsp" 第一个"/"代表项目的根目录
request.getRequestDispatcher("/admin/users/list.jsp").forward(request, response);
// "/web4/error.jsp" 第一个"/"代表服务器的根目录
response.sendRedirect("/web4/error.jsp");
4.转发只需要发送一次请求,而重定向需要发送两次请求
5.转发是服务器内部的处理机制,客户端不需要进行任何处理。而重定向需要客户端重新发送一个请求,因此需要客户端进行相应的处理。
8.如何解决get请求或者post请求参数的中文乱码问题
1.浏览器默认字符集不是utf-8
2.servlet 请求乱码可能的原因: getParameter() 默认使用 iso-8859-1编码获取的参数
3.服务器输出的字符串的编码和客户端显示字符串的编码不一致。
//设置页面编码
response.setContentType("text/html; charset=UTF-8");
//设置request对象的编码
request.setCharacterEncoding("utf-8");
//设置response对象的编码
response.setCharacterEncoding("utf-8");
9.servlet的生命周期
1、Servlet对象的创建
2、Servlet对象初始化
3、处理请求
4、Servlet对象销毁
10.统一字符集的过滤器的配置
web.xml
注意:在servlet标签上面
<!-- 字符集过滤器的配置 -->
<filter>
<filter-name>CharsetFilter</filter-name>
<filter-class>com.as.filter.CharsetFilter</filter-class>
<init-param>
<param-name>charset</param-name>
<param-value>utf-8</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>CharsetFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>