The advance of Java -- Servlet, Jsp(Day08)

1. Servlet:

①Request Path:

(1)Get: parameter are stored in url of data package, we can see them on browser

(2)Post: the data is stored in the data area of protocol package.

②receive & send value:

leading end:

<input type="text" name="user">

after end: 

String name = request.getParameter("usr");
request.getParameterValues("checkbox");//checkbox

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<form action="f1.do" method="post">
UserName:<input type="text" name = "UserName"><br>
PassWord:<input type="text" name = "PassWord"><br>
Hobby:
<input type="checkbox" name = "Enjoy" value="Eating">Eating
<input type="checkbox" name = "Enjoy" value="Sleeping">Sleeping
<input type="checkbox" name = "Enjoy" value="Fighting MR.Bean">Fighting MR.Bean<br>
<input type="submit" ></input>
</form>
</body>
</html>

		response.getWriter().write("<h1>你好,Request");
		String name = request.getParameter("UserName");
		//name = new String(name.getBytes("iso-8859-1"),"utf-8");//get method
		String password = request.getParameter("PassWord");
		System.out.println(name + " " + password);
		String[] enjoy = request.getParameterValues("Enjoy");
		System.out.println(Arrays.toString(enjoy));
③Handling unidentifiable Chinese code:

get:
String username = request.getParameter("username");
username = new String(username.getBytes("iso-8859-1"),"UTF-8");
post:
request.setCharacterEncoding("utf-8");
④Redirection;

response.sendRedirect(String url);

*the difference between transmission and redirection: redirection is start another request. Conversely, transmission use the same request and response.

⑤handling the path of request resources and merge:

The servlet we used before is to handle transaction, and  there are many requests from leading end, so if we use this way to deal, the coupling factor is high. Under such circumstance, setting web.xml is an advisable method.

<servlet>
  	<servlet-name>aa</servlet-name>
  	<servlet-class>com.bsr.servlet.Servlet2</servlet-class>
  </servlet>
  
  <servlet-mapping>
  	<servlet-name>aa</servlet-name>
  	<url-pattern>*.do</url-pattern>
  </servlet-mapping>
⑥Life cycle of Servlet:

(1)the life cycle of Servlet is controlled by Tomcat container

(2)container have method like: init(), service(), destory()

(3)<load-on-startup>1</load-on-startup>: deciding whether self-starting.

(4)<init-param>: initializing parameters.
*Servlet is a single instance, which might cause synchronized problem when several threads call at the same time. So we can consider synchronized lock. 

2. Jsp: (JAVA Serve Page)

The view of Servlet.

Grammer:

①annotation: <!-- --> <%-- --%>

②expression: <%=%>

③sentence: 

(1)<%String str = request.getAttribute();%>

(2)import package: <%@ page import="java.util.*,com.bean.Student"%>

(3)pass by value: request.setAttribute("key",value); (value : String, List)

(4)transmission: request.getRequestDispatcher(String uri).forward(request,response);

(5) State Management:

Cookie: storing in the local. eg: login without pwd.

Session: storing in the server. (local only have SessionID). eg: TaoBao login.

Cookie[] cookies =  request.getCookies();
		if(cookies!=null){
		        for(Cookie c : cookies){
		            String cookieName = c.getName();
		            String cookieValue = c.getValue();
		            System.out.println(cookieName + "," + URLDecoder.decode(cookieValue,"utf-8"));
		        }
		}
		
		Cookie c1 = new Cookie("name",URLEncoder.encode("北京","utf-8"));
		Cookie c2 = new Cookie("pwd","123456");
		c2.setMaxAge(1000);
		response.addCookie(c1);
		response.addCookie(c2);
		response.sendRedirect("testCookie.html");;

(6) Filter: A special Web component, which can filter message.

/**
 * 該過濾器會過濾路徑爲*.do的所有請求,並會對傳過來的content參數進行過濾處理
 * 該過濾器設置了一個初始化參數(initParam),會將傳來的參(content)按照該參數值進行比對處理
 * 過濾器處理在doFilter方法中進行,如果有非法情況,直接處理掉,
 * 如果沒有則調用chain.doFilter方法,
 * chain.doFilter方法:如果還有過濾器就接着進其它過濾器去過濾,如果沒有,進入相應的Servlet
 * 
 */
@WebFilter(value="*.do",initParams={  
        @WebInitParam(name = "illegalStr", value = "xidada")    
})
public class Filter1 implements Filter {
	private FilterConfig config;
    /**
     * Default constructor. 
     */
    public Filter1() {
        // TODO Auto-generated constructor stub
    }

	/**
	 * @see Filter#destroy()
	 */
	public void destroy() {
		// TODO Auto-generated method stub
	}

	/**
	 * @see Filter#doFilter(ServletRequest, ServletResponse, FilterChain)
	 */
	public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
		// TODO Auto-generated method stub
		// place your code here
		request.setCharacterEncoding("utf-8");
		response.setContentType("text/html;charset=utf-8");
        PrintWriter out = response.getWriter();
        

        String content = request.getParameter("content");
        String illegalStr = config.getInitParameter("illegalStr");
        if(content.indexOf(illegalStr) != -1){
            //有敏感字
            out.println("<h1>評論內容包含了敏感字</h1>");
        }else{
            //沒有敏感字
            // 執行FilterChain的doFilter會調用後續的過濾器或者servlet。
        	chain.doFilter(request, response);
        }
        System.out.println("Filter1's doFilter end.");
		// pass the request along the filter chain
	}

	/**
	 * @see Filter#init(FilterConfig)
	 */
	public void init(FilterConfig fConfig) throws ServletException {
		// TODO Auto-generated method stub
		System.out.println("filter1 init....");
		config = fConfig;
	}

}
*Praice: realizing login and displaying user information:

Servlet:

public class Servlet5 extends HttpServlet {
	private static final long serialVersionUID = 1L;

	/**
	 * @see HttpServlet#service(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		request.setCharacterEncoding("utf-8");
		System.out.println("Servlet5");
		String name = request.getParameter("userName");
		String pwd = request.getParameter("pwd");
		if(query(name,pwd)){
			List<Student> stuList = list();
			request.setAttribute("list", stuList);
			request.getRequestDispatcher("list.jsp").forward(request, response);
		}else{
			response.sendRedirect("login.jsp");
		}
	}
	public boolean query(String name,String pwd){

		Connection conn = null;
		Statement stat = null;
		ResultSet rs = null;
		try {
			Class.forName("com.mysql.jdbc.Driver");
			conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/bsr_data", "root", "root");
			String sql = "select * from student";
			stat = conn.createStatement();
			rs = stat.executeQuery(sql);
			if(rs.next()){
				return true;
			}else{
				return false;
			}
			
		} catch (ClassNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} finally {
			
				try {
					if(rs != null){
					rs.close();
					}
					if(stat != null){
						stat.close();
						}
					if(conn != null){
						conn.close();
						}
				} catch (SQLException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
			}
		return false;
	}
	public List<Student> list(){
		Connection conn = null;
		Statement stat = null;
		ResultSet rs = null;
		List<Student> list = null;
		try {
			Class.forName("com.mysql.jdbc.Driver");
			conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/bsr_data", "root", "root");
			String sql = "select * from student";
			stat = conn.createStatement();
			rs = stat.executeQuery(sql);
			list = new ArrayList<Student>();
			while(rs.next()){
				Student stu = new Student(
						rs.getString("name"),
						rs.getInt("age"),
						rs.getInt("stu_id"),
						rs.getString("sex"),
						rs.getString("address")
						);
				list.add(stu);
			}
			
		} catch (ClassNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} finally {
			
				try {
					if(rs != null){
					rs.close();
					}
					if(stat != null){
						stat.close();
						}
					if(conn != null){
						conn.close();
						}
				} catch (SQLException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
			}
		return list;
	}
}
list.jsp:

<%@ page language="java" contentType="text/html; charset=utf-8"
    pageEncoding="utf-8"%>
<%@ page  import="java.util.*,com.bsr.domain.Student"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Insert title here</title>
</head>
<body>
<%List<Student> list = (List<Student>)request.getAttribute("list"); %>
<form action="Servlet5" method="post">
<table border = "1">
	<tr>
		<td>Id</td>
		<td>Name</td>
		<td>Address</td>
		<td>Age</td>
		<td>Sex</td>
	</tr>
	<%for(int i=0;i<list.size();i++){
		Student stu = list.get(i);
	%>
	<tr>
		<td><%=stu.getStuId() %></td>
		<td><%=stu.getName() %></td>
		<td><%=stu.getAddress() %></td>
		<td><%=stu.getAge() %></td>
		<td><%=stu.getSex() %></td>
	</tr>
	<%	
	} 
	%>
</table>
</form>

</body>
</html>
login.jsp:

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Insert title here</title>
</head>
<body>
<form action="Servlet5" method="post">
UserName:<input type="text" value="userName">
Password:<input type="password" value="pwd">
<input type="submit">
</form>
</body>
</html>




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章