Servlet 进阶

HTTP请求

在这里插入图片描述
根据请求头的信息,可以判断不同的机器类型(比如电脑,手机,平板),进行不同的显示

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		response.setContentType("text/html;charset=utf-8");
		response.getWriter().append("Served at: ").append(request.getContextPath());
		String userAgent = request.getHeader("User-Agent");
		response.getWriter().append("\n");
		if(userAgent.indexOf("Windows")!=-1) {
			response.getWriter().append("PC");
		} else if(userAgent.indexOf("Android")!=-1 || userAgent.indexOf("iPhone")!=-1) {
			response.getWriter().append("手机AP");
		}
	}

在这里插入图片描述

HTTP常见状态码

在这里插入图片描述

ContentType

可以用来解决 response 的中文乱码问题
在这里插入图片描述

请求转发与重定向

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
注意:请求转发,只和向服务器发送一次请求;响应重定向浏览器会和Tomcat有两次请求。

	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		
		System.out.println("用户登录");
		request.setAttribute("username", "present");//设置属性名和属性值
		//请求转发
		request.getRequestDispatcher("/direct/index").forward(request, response);
		//响应重定向,需要加上项目路径
		response.sendRedirect("/request-structural/direct/index");
		请求转发 和 响应重定向 只能使用一个
	}

自定义属性 Attribute

在这里插入图片描述
request设置的属性请求转发后可以在另一个servlet中获取,但是如果是重定向就不可以了(因为重定向是两次请求)

Cookie

在这里插入图片描述
cookie默认关闭浏览器清除,可以手动设置他的存活时间
cookie.setMaxAge(12460*60); //设置cookie的存活时间,单位是秒

@WebServlet("/cookie/login")
public class LoginServlet extends HttpServlet{
	
	@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		System.out.println("尝试登录");
		Cookie cookie = new Cookie("user","present");
		cookie.setMaxAge(1*24*60*60); //设置cookie的存活时间,单位是秒
		resp.addCookie(cookie);
		resp.getWriter().println("login success!");
	}

获取cookie
Cookie[] cookies = request.getCookies();
获取cookie的 key 和 value
cookie.getName()
cookie.getValue()

@WebServlet("/cookie/index")
public class Index2Servlet extends HttpServlet {
	
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		response.setCharacterEncoding("utf-8");
		//或者 response.setContentType("text/html;charset=utf-8");
		Cookie[] cookies = request.getCookies();
		if(cookies==null) {
			response.getWriter().println("没有Cookie");
			return;
		}
		String user=null;
		for(Cookie cookie:cookies) {
			System.out.println(cookie.getName()+":"+cookie.getValue());
			if(cookie.getName().equals("user")) {
				user = cookie.getValue();
				break;
			}
		}
		if(user==null) {
			//cookie中没有用户信息
			System.out.println("user not login!");
			response.getWriter().println("user not login!");
		} else {
			System.out.println("user="+user);
			response.getWriter().println("user:"+user);
		}
	}

}

Session

在这里插入图片描述
在这里插入图片描述
Session信息保存在服务器端,保存后会返回一个SessionId给浏览器,这个SessionId会保存在浏览器的Cookie中。(Session默认在服务器端保存半个小时)
在这里插入图片描述
例子:

@WebServlet("/session/login")
public class SessionLoginServlet extends HttpServlet {
	
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		System.out.println("用户正在请求登录");
		HttpSession session = request.getSession();
		String sessionId = session.getId();
		System.out.println("Login session id = "+sessionId);
		session.setAttribute("name", "present");
		response.sendRedirect("/request-structural/session/index");
	}

}
@WebServlet("/session/index")
public class SessionIndexServlet extends HttpServlet {
	
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		
		response.setContentType("text/html;charset=utf-8");
		
		HttpSession session = request.getSession();
		String sessionId = session.getId(); //同一个页面用同一个 Session 对象
		System.out.println("Index session id = "+sessionId);
		String name = (String)session.getAttribute("name");
		if(name!=null) {
			System.out.println("欢迎使用本系统,"+name);
			response.getWriter().println("Login sucess!");
			System.out.println("登录成功");
		}else {
			System.out.println("登录失败");
			response.getWriter().println("Login Failed!");
		}
		
	}

}

Servlet上下文对象 ServletContext

在这里插入图片描述
例子:(这里可能会修改的数据使用了 从xml获取
有一点一点点的变化:servletContext.getInitParameter(“copyright”);

  <context-param>
  	<param-name>copyright</param-name>
  	<param-value>@2021 京备案号20409237123</param-value>
  </context-param>
  <context-param>
  	<param-name>title</param-name>
  	<param-value>presentx.top</param-value>
  </context-param>
@WebServlet("/servletcontext/init")
public class ServletContexInitServlet extends HttpServlet {
	
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		ServletContext servletContext = request.getServletContext();
		response.getWriter().println("init success");
		String copyright = servletContext.getInitParameter("copyright");
		servletContext.setAttribute("copyright", copyright);
		String title = servletContext.getInitParameter("title");
		servletContext.setAttribute("title", title);
		这样,当copyright或title需要改动的时候只改xml文件就可以了,不用动源代码
	}
}
@WebServlet("/servletcontext/default")
public class ServletContextDefaultServlet extends HttpServlet {
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		
		response.setContentType("text/html;charset=utf-8");
		
		ServletContext servletContext = request.getServletContext(); //Servlet上下文对象是一个全局对象
		//设置属性后可以在任意位置获取
		String copyright =(String) servletContext.getAttribute("copyright");
		String title = (String) servletContext.getAttribute("title");
		response.getWriter().println("<h1>"+title+"</h1>"+copyright);
		System.out.println("cout success");
	}
}

常用下面这三种对象 设置 Attribute 进行信息的传递
在这里插入图片描述

解决中文乱码问题在这里插入图片描述

response 就设置

	response.setContentType("text/html;charset=utf-8");

doPost 的 request 就设置(doGet的request不用管,Tomcat8及以后自动解决)

	request.setCharacterEncoding("utf-8");

web.xml 的常用配置

  1. 设置默认首页(也可以设置二级默认首页)
<welcome-file-list>
    <welcome-file>index.html</welcome-file>
    <welcome-file>index.htm</welcome-file>
    <welcome-file>index.jsp</welcome-file>
    <welcome-file>default.html</welcome-file>
    <welcome-file>default.htm</welcome-file>
    <welcome-file>default.jsp</welcome-file>
  </welcome-file-list>
  1. 设置 404,500等状态码默认页面
<!-- 指定错误页面 error是webapps下的页面-->
  <error-page>
  	<error-code>404</error-code>
  	<location>/error/404.html</location>
  </error-page>
  <error-page>
  	<error-code>500</error-code>
  	<location>/error/500.html</location>
  </error-page>

发布

在这里插入图片描述
在这里插入图片描述

JSP 九大内置对象

在这里插入图片描述
其实就是Servlet里的对象拿到了jsp中,只不过提前起好了变量的名字。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值