Posts JavaWeb基础——servlet
Post
Cancel

JavaWeb基础——servlet

概述

简单点说,关于JavaWeb基础,也就是Servlet、JSP 以及 MVC 模式编程。

Servlet

一个继承了HttpServlet 的 Java 类,可用于接收网络中的请求并做一些处理。

目前常用的类长这样:

1
2
3
4
5
6
7
8
9
public class Servlet extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException{
        doGet(request, response);
    }
    
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException{
        //对传过来的请求做的一些处理
    }
}

关于路径的配置

在web.xml中配置
1
2
3
4
5
6
7
8
<servlet>
    <servlet-name>ServletTest</servlet-name>
    <servlet-class>Servlet文件的地址</servlet-class>
</servlet>
<servlet-mapping>
    <servlet-name>ServletTest</servlet-name>
    <url-pattern>/在服务器中映射的地址</url-pattern><!--基于WebApp地址来映射-->
</servlet-mapping>
  1. <servlet-name>、<servlet-class>和<jsp-file>元素

    <servlet> 必须含有 <servlet-name>和<servlet-class>,或者<servlet-name>和<jsp-file>。

    • <servlet-name>用来定义servlet的名称,该名称在整个应用中必须是惟一的
    • <servlet-class>用来指定servlet的完全限定的名称。
  2. <servlet-mapping>

    <servlet-mapping>含有 <servlet-name> 和 <url-pattern>

    • <servlet-name>:Servlet 的名字,唯一性和一致性,与<servlet> 元素中声明的名字一致。
    • <url-pattern>:指定相对于 Servlet 的 URL 的路径。该路径相对于 web 应用程序上下文的根路径。<servlet-mapping>将 URL 模式映射到某个 Servlet ,即该 Servlet 处理的 URL。
通过注解配置

@WebServlet注解的相关属性

  1. asyncSupported:声明servlet是否支持异步操作模式
  2. description:servlet的描述信息
  3. displayName:servlet的显示名称
  4. initParams:servlet的初始化参数
  5. name:servlet的名称
  6. urlPatterns:servlet的访问URL(指定了该servlet在浏览器上的访问url)
  7. value:servlet的访问URL
  8. loadOnStartup:指定servlet是否应用启动时加载(必须保证,value或urlPatterns有值,否则,就需要采用传统servlet配置方式进行配置,即在web.xml中配置)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
@WebServlet(
    name = "UserServlet",
    urlPatterns = {"/userlogin"},
    loadOnStartup = 1  //1的优先级最高
)
public class UserServlet extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doGet(request, response);
    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //一些处理
    }
}

request、response参数介绍

request
1
2
3
4
5
6
7
8
9
10
11
12
13
14
public class UserServlet extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doGet(request, response);
    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        request.setCharacterEncoding("utf-8");//对request传来的数据进行转码。
        request.getParameter("username");//从请求中获取username这个key所对应的value,返回的一般是字符串。
        request.getParameterValues("username");//如果请求中有多个相同的key传的不同的值,通过这个方法得到一个String[]。
        request.getAttribute("username");//得到请求中之前通过setAttribute传入的Attribute,可以是任何类型的数据。
        HttpSession session = request.getSession();//从请求中获取一个HttpSession对象,可以通过session.setAttribute("user",User)在浏览器中添加Session。
        RequestDispatcher disp = request.getRequestDispatcher("要跳转的地址//相对地址");//请求调度器,disp可以将request和response两个对象的所有信息一起转发给目的地址。
    }
}
response
1
2
3
4
5
6
7
8
9
10
11
public class UserServlet extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doGet(request, response);
    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    	reponse.setContentType("text/html;charset=utf-8");
        response.sendRedirect("跳转的地址,这里需要的是绝对地址,所以要在前面加上request.getContextPath()");
        PrintWriter out = response.getWriter();//然后通过 out.println("xxx");就可以直接向浏览器输出内容。
    }
}

JSP

概述

呃,简单点说,JSP就是一个可以嵌入Java语句的 html 页面。

基本语法

指令

JSP指令用来设置与整个JSP页面相关的属性,JSP指令语法格式:

1
<%@ directive attribute="value" %>

这里有三种指令标签:

指令 描述
<%@ page … %> 定义页面的依赖属性,比如脚本语言、error页面、缓存需求等等
<%@ include … %> 包含其他文件
<%@ taglib … %> 引入标签库的定义,可以是自定义标签
表达式
1
<%=(new java.util.Date()).toLocaleString()%>
流程控制

这里举for循环的例子,if、switch、while 同理。

1
2
3
<% for(int i = 0;i<prolist.size();i++){ %>
    <!--一些html标签-->
<% } %>
一个简单的完整的例子
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>hello</title>
</head>
<body>
    <table width="300" border="1" cellspacing="1" cellpadding="1" style="text-align: center";>
        <thead>
            <tr>
                <th> 序号 </th>
                <th> 内容 </th>
            </tr>
        </thead>
        <% 
        	String[] arr={"1001", "1002", "1003", "1004", "1005" };
            for(int i =0;i<arr.length;i++){
        %>
                <tr>
                    <td> <% out.println(i+1); %> </td>
                    <td> <% out.println(arr[i]); %> </td>
                </tr>
        <% } %>
    </table>
</body>
</html>

MVC模式编程

photo

This post is licensed under CC BY 4.0 by the author.

算法篇:全排列(eg:蓝桥杯 ALGO-1005 数字游戏)

持久层框架——Hibernate

Comments powered by Disqus.