servlet基础代码书写

servlet连接jdbc

import java.sql.ResultSet;

@WebServlet("/test")
public class JdbcServlet extends HttpServlet{
	Connection conn=null;
	PreparedStatement ps=null;
	@Override
	public void doGet(HttpServletRequest request,HttpServletResponse response){
	try{
     Class.forName("com.mysql.cj.jdbc.Driver");
     conn=DriverManager.getConnection("jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf8&serverTimezone=GMT%2B8&useSSL=false","root","root");
     ps=conn.prepareStatement("select * from student");
     //ps.setParemeter(0,"lmj");
     ResultSet rs= ps.executeQuery();
     while(((ResultSet) rs).next()){
    	 response.getWriter().write(rs.getString("name")+"  "+rs.getString("age")+"<br>");
     }
	}catch(Exception e){System.out.println(e.toString());}
	finally{
		try{
		ps.close();
		conn.close();
		}catch(Exception e){}
	}
	}
}

servlet封装jdbc(dao层实现代码)

public class UserDo {
	private static String tbName = "user";
	static final String JDBC_DRIVER = "com.mysql.cj.jdbc.Driver";
	static final String DB_URL = "jdbc:mysql://localhost:3306/nupoodb?useUnicode=true&characterEncoding=utf8&serverTimezone=GMT%2B8&useSSL=false";
	static final String USER = "root";
	static final String PASS = "root";
    private static Connection conn;
	public static Connection getConnection() {
        try {
            Class.forName(JDBC_DRIVER);
            Connection conn = DriverManager.getConnection(DB_URL,USER,PASS);
        } catch (Exception e) {
            System.out.println(e);
        }
        return conn;
    }
	public static int login(User e){
		int status = 0;
		try {
			Connection con = UserDo.getConnection();
			String sql = "SELECT username,password FROM "+tbName+" where uname=? and upass=?";
			PreparedStatement ps = con.prepareStatement(sql);
			ps.setString(1, e.getUname());
			ps.setString(2, e.getUpass());
			ResultSet rs = ps.executeQuery();
            if(rs.next()==true) {
            	status=1;
            }
            rs.close();
            con.close();
		} catch (Exception ex) {
			ex.printStackTrace();
		}
		return status;
	}
	//UserDao.login()即可调用
}

servlet处理前端传来的多选框的值

String hobbys[]=request.getParameterValues(“hobby”);

servlet的三种跳转方式

response.sendRedirect("url")

1. 重 定 向 \color{red}{重定向} ,当一个Servlet向当前的Servlet发出请求后,经过当前的Servlet的方法后,会再向服务器发出一个请求,生定向到这个方法中指定的URL,也就是说,在这个过程中,Servlet要向服务器请求两次,才能转到请求的URL.客户端跳转

request.getRequestDispatcher("url").forword(request,response)

2. 请 求 转 发 \color{red}{请求转发} ,也就是说,一个Servlet向当前的
Servlet发出请求后,经过这个方法后,请求会继续转发到请求的URL,在这个过程中,只向服务器发出一次请求.效率当然也就高了.服务端跳转

PrintWriter out = request.getWriter();

out.println("<script>window.location.href = "url"</script>");

3. 在 S e r v l e t 中 输 出 J a v a S c r i p t 代 码 \color{red}{在Servlet中输出JavaScript代码} ServletJavaScript,也能实现页面的跳转–要向服务器发出再次请求才能跳转到的URL.客户端跳转

重定向(客户端跳转)和分发(服务器端跳转)的区别:
1.转发是服务器行为,重定向是客户端行为
2.转发的速度快;重定向速度慢
3.转发的是同一次请求;重定向是两次不同请求
4.转发不会执行转发后的代码;重定向会执行重定向之后的代码
5.转发地址栏没有变化;重定向地址栏有变化
6.转发必须是在同一台服务器下完成;重定向可以在不同的服务器下完成

转发过程:客户浏览器发送http请求,web服务器接受此请求,调用内部的一个方法在容器内部完成请求处理和转发动作,将目标资源发送给客户;在这里,转发的路径必须是同一个web容器下的url,其不能转向到其他的web路径上去,中间传递的是自己的容器内的request。在客户浏览器路径栏显示的仍然是其第一次访问的路径,也就是说客户是感觉不到服务器做了转发的。转发行为是浏览器只做了一次访问请求。

重定向过程:客户浏览器发送http请求,web服务器接受后发送302状态码响应及对应新的location给客户浏览器,客户浏览器发现是302响应,则自动再发送一个新的http请求,请求url是新的location地址,服务器根据此请求寻找资源并发送给客户。在这里location可以重定向到任意URL,既然是浏览器重新发出了请求,则就没有什么request传递的概念了。在客户浏览器路径栏显示的是其重定向的路径,客户可以观察到地址的变化的。重定向行为是浏览器做了至少两次的访问请求的。

重定向,其实是两次request

第一次,客户端request A,服务器响应,并response回来,告诉浏览器,你应该去B。这个时候IE可以看到地址变了,而且历史的回退按钮也亮了。重定向可以访问自己web应用以外的资源。在重定向的过程中,传输的信息会被丢失。

servlet过滤器(登陆认证+字符编码过滤)

public class AuthFilter implements Filter { 
    //String encoding = null;  //字符编码
    @Override
    public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException {
    
        HttpServletRequest request = (HttpServletRequest) req;
        HttpServletResponse response = (HttpServletResponse) res;
 
        String uri = request.getRequestURI();
        if (uri.endsWith("login.html") || uri.endsWith("login")) {
            chain.doFilter(request, response);
            return;
        }
 
        String userName = (String) request.getSession().getAttribute("userName");
        if (null == userName) {
            response.sendRedirect("login.html");
            return;
        }
        chain.doFilter(request, response);
    }
    /**
    *if(encoding != null){
            request.setCharacterEncoding(encoding);  //设置request的编码格式
            response.setContentType("text/html;charset="+encoding); //设置response字符编码
        }
    */
    ....
}

web.xml中添加配置:

<filter>
    <filter-name>AuthFilter</filter-name>
    <filter-class>com.lmj.filter.AuthFilter</filter-class>
  </filter>

  <filter-mapping>
    <filter-name>AuthFilter</filter-name>
    <url-pattern>/*</url-pattern>
  </filter-mapping>

<!-- 过滤器声明 -->
<!--  <filter>
      <filter-name>CharactorFilter</filter-name>
      <filter-class>com.cn.gao.CharactorFilter</filter-class>
      <init-param>
          <param-name>encoding</param-name>
          <param-value>gbk</param-value>
      </init-param>
  </filter>
      <filter-mapping>
          <filter-name>CharactorFilter</filter-name>  
          <url-pattern>/*</url-pattern>    
      </filter-mapping>
  -->

参考文章

https://blog.csdn.net/happydecai/article/details/80308595

https://blog.csdn.net/y88845601/article/details/38142099

  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值