• JSP for query


    1. JSP中部分常用标签

    Form.jsp

    <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    <html>
    <head>
        <title>Form</title>
        <script type="text/javascript">
            function check(){
                username = document.login.hehe.value;
                console.log(username);
                if(username.length<6 || username.length>8){
                    alert("用户名长度不合适!");
                    return false;
                }else{
                    return true;
                }
            }
        </script>
    </head>
    <body>
        <form action="/login" name="login" method="post">
            各种表单元素
            Username:<input type="text" name="hehe" value="hehe">
            Password:<input type="password" name="pwd" value="pwd">
        </form>
        <form>
            Username:<input type="text" name="hehe" value="hehe">
            Password:<input type="password" name="pwd" value="pwd">
            <input type="submit" name="SUMBIT" value="SUMBIT">
            <input type="reset" name="hehe" value="RESET">
            <input type="button" value="button" onclick="javascript:check()">
        </form>
        <form>
            <input type="radio" name="sex" value="1" checked><input type="radio" name="sex" value="2"></form>
        <br>
        <form>
            <input type="checkbox" name="hobby" value="1">Book
            <input type="checkbox" name="hobby" value="2">Chess
            <input type="checkbox" name="hobby" value="3">Movie
        </form>
            <select name="City">
                <option value="1" selected>Tianjin</option>
                <option value="2">Beijing</option>
                <option value="3">Shanghai</option>
                <option value="4">Xi'an</option>
                <option value="5">Tangshan</option>
            </select>
        <form>
            <textarea name="文本域" cols="10" rows="10">
                默认文本
            </textarea>
        </form>
    </body>
    </html>

    ----------------------------------------------------------------------------------------------------------------

    2. <jsp:forward>和response.sendRedirect()异同:

    <%
        String username = request.getParameter("username");
        String userpass = request.getParameter("password");
        if ("zhang".equals(username) && "123".equals(userpass)){
    %>
    <jsp:forward page="success.jsp"/>
    <%
        } else {
    %>
    <jsp:forward page="index.jsp"/>
    <%
        }
    %>
    <%
            String username = request.getParameter("username");
            String userpass = request.getParameter("password");
            if ("zhang".equals(username) && "123".equals(userpass)){
                response.sendRedirect("success.jsp");
            } else {
                response.sendRedirect("index.jsp");
            }
    %>

    相同:均导向同一目标文件;

    不同:1) <jsp:forward>属于一次请求,服务器端跳转,地址栏不发生变化; 而response.sendRedirect()导致二次请求,地址栏发生变化。

       2) 通过<jsp:forward>方式跳转到目标文件后,request中的对象仍起作用;而通过response.sendRedirect()跳转到目标文件后,request中的对象失效。

    ----------------------------------------------------------------------------------------------------------------

     3. <jsp:include>标签

      效果同

    <%@ include%>

    但不同之处在于,include指令在编译期起作用,见目标文件预先加载进来;而<jsp:include>在运行期起作用,并且加载完后返回原文件继续执行。

    ----------------------------------------------------------------------------------------------------------------

    4. <jsp:forward>和<jsp:include>的区别:

      <jsp:forward>在导向目标文件后,不再返回;<jsp:include>在导向目标文件后,会返回原文件继续执行后续代码。

    ----------------------------------------------------------------------------------------------------------------

    5. 要想使用JSTL,需要以下两点的配置:

      1) 

            <dependency>
                <groupId>javax.servlet</groupId>
                <artifactId>jstl</artifactId>
                <version>1.2</version>
            </dependency>
            <dependency>
                <groupId>taglibs</groupId>
                <artifactId>standard</artifactId>
                <version>1.1.2</version>
            </dependency>

      2) 在JSP文件中声明标签库  

    <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>

     ----------------------------------------------------------------------------------------------------------------

    6. 四大内置对象:application,session,request,pageContext的作用范围

    application:所有用户所共享的存储位置;

    session:每个用户对应一个session,用于存储本用户相关的信息;

    request:每次访问会对应一个request,request是为每个用户的每次请求所设置的存储信息位置;

    pageContext:pageContext对应每次访问的每个页面。

    经常使用session和request。

    若多次访问之间共享信息则使用session;若需要在某次访问的多个页面之间共享信息,则使用request(比如,使用jsp:forwrad转向的文件和当前文件就属于同一次请求)

    ==>由以上对session和request的理解,可知用户登录信息应保存在session中。

    <c:set var="user" scope="session" value="hehe"/>

     ----------------------------------------------------------------------------------------------------------------

     7. 对Servlet的个人理解:

    1) 可以通过在JSP页面中嵌入Java代码来完成相应的逻辑控制等。但大量的Java代码和JSP元素混合造成难以维护,所以应该将Java代码同JSP页面分离开来。而分离的Java代码负责请求控制等,形成现在的Servlet。Servlet具有JSP类似的功能:1, 接受请求; 2, 调用方法; 3, 响应用户。但二者的专注点不同,JSP专注页面数据展示而Servlet专注请求逻辑控制。

    2) 根据1)的分析可知,此时MVC模型中的V和C成型。

    3) 在Java EE中,Servlet和JSP同属于其中的Web层组件。

    4) 通常在应用服务器中,均对Servlet有基本的实现,而且基本为HttpServelt实现。比如,在Tomcat容器中,相应的包为javax.servlet.*和javax.servlet.http.*,存在于servlet-api.jar中。

    5) 在定义并使用自己的Servlet时,需要以下必要步骤:

      1. extends HttpServlet

      2. 重写doGet/doPost方法

      3. 在web.xml中配置Servlet/使用注解@WebServlet

      4. 使用定义的Servlet

    Example:

       1. extends HttpServlet  +  2. 重写doGet/doPost方法

    public class LoginServlet extends HttpServlet {
    
        private static final Logger log = LoggerFactory.getLogger(LoginServlet.class);
    
        @Override
        protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
            log.info("doGet implementation...");
            req.getRequestDispatcher("/WEB-INF/jsp/login.jsp").forward(req, resp);
            log.info("doGet end");
        }
    
        @Override
        protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
            log.info("doPost implementation...");
            String username = req.getParameter("username");
            String password = req.getParameter("password");
            UsernamePasswordToken token = new UsernamePasswordToken(username,password);
            token.setRememberMe(true);
            Subject subject = SecurityUtils.getSubject();
            String error = null;
            try {
                subject.login(token);
            } catch (UnknownAccountException e){
                error = "Incorrect user/password";
            } catch (IncorrectCredentialsException e){
                error = "Incorrect user/password";
            } catch (AuthenticationException e){
                error = "other unknown error" + e.getMessage();
            }
    
            log.error(error);
    
            if (error != null){
                req.setAttribute("error",error);
                req.getRequestDispatcher("/WEB-INF/jsp/login.jsp");
            } else {
                req.getRequestDispatcher("/WEB-INF/jsp/login_success.jsp");
            }
            log.info("doPost end");
        }
    }

      3. 在web.xml中配置Servlet/使用注解@WebServlet

    @WebServlet(name = "loginServlet", urlPatterns = "/login")

    或者

        <servlet>
            <servlet-name>loginServlet</servlet-name>
            <servlet-class>com.chris.web.servlet.LoginServlet</servlet-class>
        </servlet>
    
        <servlet-mapping>
            <servlet-name>loginServlet</servlet-name>
            <url-pattern>/login</url-pattern>
        </servlet-mapping>

       4. 使用定义的Servlet

    <form action="${pageContext.request.contextPath}/login" method="post">
        用户名:<input type="text" name="username"><br/>
        密码:<input type="password" name="password"><br/>
        <input type="submit" value="登录">
    </form>

      ----------------------------------------------------------------------------------------------------------------

    8. JDBC操作数据库

    个人理解JDBC: 

    JDBC是Java应用同数据库交互的一组标准接口,而各大数据库生产商则在JDBC接口的基础上实现各自的数据库驱动,比如com.mysql.jdbc.Driver。

    JDBC操作数据库的传统套路如下:

    1) 加载驱动程序:

    Class.forName("com.mysql.jdbc.Driver");

    2) 建立数据库连接:

    Connection connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/shiro","root", "");

    3) 创建语句对象: 

    String sql = "select * from users where username=? and password=?";
    PreparedStatement ps = connection.prepareStatement(sql);

    4) 变量赋值,替换?

    ps.setString(1, "Chris");
    ps.setString(2, "123");

    5) 执行SQL语句并处理ResultSet

    ResultSet resultSet = ps.executeQuery();
    while (resultSet.next()){
      System.out.println(resultSet.getString(2));
    }

    6) 关闭相关对象

    resultSet.close();
    ps.close();
    connection.close();

    由以上操作步骤可知,在Java应用中,若仅采用JDBC+相应驱动会造成代码的大量重复,并且也很难保证效率。所以在传统的J2EE项目中,采用EJB方式对JDBC封装,但使用起来仍然非常麻烦。由此催生了ORM框架,比如Hibernate, JPA等。Hibernate作为JDBC的轻量级封装,完全采用对象的思想,使得我们在与数据库交互时,更加方便。

     ----------------------------------------------------------------------------------------------------------------

    9. 在JSP和Servlet中有几个地方可以设置编码,各个编码的功能也不一样。 

    各种编码一览

    A. JSP/Servlet都有的编码设置

      1. request.setCharacterEncoding("UTF-8")

      2. response.setCharacterEncoding("UTF-8")

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

      4. response.setHeader("Content-Type", "text/html; charset=UTF-8");

    B. JSP专有的编码设置

      1. <%@ page pageEncoding="UTF-8" %>

      2. <%@ page contentType="text/html; charset=UTF-8" %>

    C. HTML页面中的编码设置

      1. <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

     ----------------------------------------------------------------------------------------------------------------

     10.

    清醒时做事,糊涂时读书,大怒时睡觉,独处时思考; 做一个幸福的人,读书,旅行,努力工作,关心身体和心情,成为最好的自己 -- 共勉
  • 相关阅读:
    C++中堆和栈的区别
    JavaScript 点击切换菜单
    正则表达式过滤掉CSS样式
    单例模式DEMO
    将来的你,一定会感谢现在努力的自己
    1066 图像过滤 (15 分)
    1076 Wifi密码 (15 分)
    1071 小赌怡情 (15 分)
    1046 划拳 (15 分)
    1086 就不告诉你 (15 分)
  • 原文地址:https://www.cnblogs.com/hello-yz/p/5454827.html
Copyright © 2020-2023  润新知