学习servlet

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>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值